package com.zpark.feign;

import com.zpark.config.FeignConfiguration;
import com.zpark.feign.impl.FeignServerUserControllerFeignImpl;
import com.zpark.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * 该接口与被调用服务的控制层保持一致（方法名字+注解）
 */
/**
 * 注解@FeignClient的作用是声接口开启feign功能
 * 属性 value：指定映射的微服务（即在服务注册中心的服务名字）
 * 属性 fallback：当服务提供者宕机之后，执行指定实现类中的方法，而不是调用宕机的服务器接口
 * 属性configuration：配置feign的配置类
 */
@FeignClient(
        value = "feign-server",
        fallback = FeignServerUserControllerFeignImpl.class,
        configuration = FeignConfiguration.class
)
public interface IFeignServerUserControllerFeign {
    // 此处的注解作用：用于映射服务提供者的请求路径
    @GetMapping("/user/all")
    List<User> getAll();

    @GetMapping("/user/get_id/{id}")
    User getId(@PathVariable Integer id);

    @PostMapping("/user/update")
    void update(@RequestBody User user);

    @PostMapping("/user/insert")
    void insert(@RequestBody User user);

    @GetMapping("/user/del/{id}")
    void delete(@PathVariable Integer id);
}
